/* ---------------------------------------------------------------------------
 * 
 * SAC Compiler Construction Framework
 * 
 * ---------------------------------------------------------------------------
 * 
 * SAC COPYRIGHT NOTICE, LICENSE, AND DISCLAIMER
 * 
 * (c) Copyright 1994 - 2010 by
 * 
 *   SAC Development Team
 *   SAC Research Foundation
 * 
 *   http://www.sac-home.org
 *   email:info@sac-home.org
 * 
 *   All rights reserved
 * 
 * ---------------------------------------------------------------------------
 * 
 * The SAC compiler construction framework, all accompanying 
 * software and documentation (in the following named this software)
 * is developed by the SAC Development Team (in the following named
 * the developer) which reserves all rights on this software.
 * 
 * Permission to use this software is hereby granted free of charge
 * exclusively for the duration and purpose of the course 
 *   "Compilers and Operating Systems" 
 * of the MSc programme Grid Computing at the University of Amsterdam.
 * Redistribution of the software or any parts thereof as well as any
 * alteration  of the software or any parts thereof other than those 
 * required to use the compiler construction framework for the purpose
 * of the above mentioned course are not permitted.
 * 
 * The developer disclaims all warranties with regard to this software,
 * including all implied warranties of merchantability and fitness.  In no
 * event shall the developer be liable for any special, indirect or
 * consequential damages or any damages whatsoever resulting from loss of
 * use, data, or profits, whether in an action of contract, negligence, or
 * other tortuous action, arising out of or in connection with the use or
 * performance of this software. The entire risk as to the quality and
 * performance of this software is with you. Should this software prove
 * defective, you assume the cost of all servicing, repair, or correction.
 * 
 * ---------------------------------------------------------------------------
 */ 





#include <stdlib.h>
#include <string.h>

#include "dbug.h"
#include "ctinfo.h"
#include "memory.h"


void *MEMmalloc( int size)
{
  void *ptr;

  DBUG_ENTER( "MEMmalloc");

  DBUG_ASSERT( (size >= 0), "MEMmalloc called with negative size!");

  if (size > 0) {
    /*
     * Since some UNIX system (e.g. ALPHA) do return NULL for size 0 as well
     * we do complain for ((NULL == tmp) && (size > 0)) only!!
     */
    ptr = malloc( size);
    
    if (ptr == NULL) {
      CTIabortOutOfMemory( size);
    }
  }
  else {
    ptr = NULL;
  }

  DBUG_RETURN( ptr);
}

void *MEMfree( void *address)
{
  DBUG_ENTER( "MEMfree");

  if( address != NULL) {
    free( address);
    address = NULL;
  }

  DBUG_RETURN( address);
}

void *MEMcopy( int size, void *mem)
{
  void *result;
     
  DBUG_ENTER("MEMcopy");
       
  result = MEMmalloc( size);
  result = memcpy( result, mem, size);

  DBUG_RETURN( result);
}
